home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE5i.s < prev    next >
Text File  |  1994-07-09  |  6KB  |  162 lines

  1.  
  2. ; Lezione5i.s    SCORRIMENTO DI UNA FIGURA IN ALTO E IN BASSO DI TUTTA LA CHIP
  3. ;        MEMORY USANDO PUNTATORI AI PITPLANES NELLA COPPERLIST
  4. ;        TASTO SINISTRO PER SPOSTARSI IN AVANTI, DESTRO PER SPOSTARSI
  5. ;        INDIETRO, ENTRAMBI PER USCIRE.
  6.  
  7.     SECTION    CiriCop,CODE
  8.  
  9. Inizio:
  10.     move.l    4.w,a6        ; Execbase in a6
  11.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  12.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  13.     jsr    -$198(a6)    ; OpenLibrary
  14.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  15.     move.l    d0,a6
  16.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  17.  
  18. ;    Nota: qua i bitplane li lasciamo puntare a $000000, ossia
  19. ;    all' inizio della CHIP MEMORY
  20.  
  21.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  22.     move.w    d0,$dff088        ; Facciamo partire la COP
  23.  
  24.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  25.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  26.  
  27. mouse:
  28.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  29.     bne.s    mouse        ; Se non ancora, non andare avanti
  30. Aspetta:
  31.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  32.     beq.s    Aspetta        ; Se si, non andare avanti, aspetta!
  33.  
  34.     btst    #2,$dff016    ; se il tasto destro e' premuto
  35.     bne.s    NonGiu        ; scorri giu!, oppure vai a NonGiu
  36.  
  37.     bsr.s    VaiGiu        ; tasto destro premuto, scorri giu!
  38.  
  39. Nongiu:
  40.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  41.     beq.s    Scorrisu    ; se si, scorri in su
  42.     bra.s    mouse        ; no? allora ripeti il ciclo il prossimo FRAME
  43.  
  44. Scorrisu:
  45.     bsr.w    VaiSu        ; fa scorrere la figura in alto
  46.  
  47.     btst    #2,$dff016    ; se anche il tasto destro e' premuto allora
  48.     bne.s    mouse        ; sono premuti entrambi, esci, oppure "MOUSE"
  49.  
  50.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  51.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  52.  
  53.     move.l    4.w,a6
  54.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  55.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  56.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  57.     rts            ; USCITA DAL PROGRAMMA
  58.  
  59. ;    Dati
  60.  
  61. GfxName:
  62.     dc.b    "graphics.library",0,0    
  63.  
  64. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  65.     dc.l    0    ; della graphics.library
  66.  
  67. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  68.     dc.l    0
  69.  
  70.  
  71. ;    Questa routine sposta la figura in alto e in basso, agendo sui
  72. ;    puntatori ai bitplanes in copperlist (tramite la label BPLPOINTERS)
  73.  
  74. VAIGIU:
  75.     LEA    BPLPOINTERS,A1    ; Con queste 4 istruzioni preleviamo dalla
  76.     move.w    2(a1),d0    ; copperlist l'indirizzo dove sta puntando
  77.     swap    d0        ; attualmente il $dff0e0 e lo poniamo
  78.     move.w    6(a1),d0    ; in d0 - il contrario della routine che
  79.     sub.l    #80*3,d0    ; sottraiamo 80*3, ossia 3 linee, facendo
  80.                 ; scorrere in BASSO la figura
  81.     bra.s    Finito
  82.  
  83.  
  84. VAISU:
  85.     LEA    BPLPOINTERS,A1    ; Con queste 4 istruzioni preleviamo dalla
  86.     move.w    2(a1),d0    ; copperlist l'indirizzo dove sta puntando
  87.     swap    d0        ; attualmente il $dff0e0 e lo poniamo
  88.     move.w    6(a1),d0    ; in d0 - il contrario della routine che
  89.     add.l    #80*3,d0    ; Aggiungiamo 80*3, ossia 3 linee, facendo
  90.                 ; scorrere in ALTO la figura
  91.     bra.w    finito
  92.  
  93.  
  94. Finito:                ; PUNTIAMO I PUNTATORI BITPLANES
  95.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  96.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  97.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  98.     rts
  99.  
  100.  
  101.     SECTION    GRAPHIC,DATA_C
  102.  
  103. COPPERLIST:
  104.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  105.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  106.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  107.     dc.w    $13e,$0000
  108.  
  109.     dc.w    $8e,$2c81    ; DiwStrt    (registri con valori normali)
  110.     dc.w    $90,$2cc1    ; DiwStop
  111.     dc.w    $92,$003c    ; DdfStart HIRES normale
  112.     dc.w    $94,$00d4    ; DdfStop HIRES normale
  113.     dc.w    $102,0        ; BplCon1
  114.     dc.w    $104,0        ; BplCon2
  115.     dc.w    $108,0        ; Bpl1Mod
  116.     dc.w    $10a,0        ; Bpl2Mod
  117.  
  118.             ; 5432109876543210
  119.     dc.w    $100,%1001001000000000    ; bits 12/15 accesi!! 1 bitplane
  120.                     ; hires 640x256, non lace
  121. BPLPOINTERS:
  122.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  123.  
  124.     dc.w    $0180,$000    ; color0
  125.     dc.w    $0182,$2ae    ; color1
  126.  
  127.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  128.  
  129.     end
  130.  
  131. Con questo programmino potete vedere il contenuto della vostra CHIP RAM,
  132. infatti viene visualizzato 1 bitplane in hires, che punta all'indirizzo $00000
  133. ossia all'inizio della CHIP RAM dell'Amiga. Premendo il tasto sinistro del
  134. mouse potete incrementare l'indirizzo visualizzato, scorrendo tutta la memoria,
  135. in cui noterete lo schermo del wordbench, quello dell'ASMONE, nonche' evetuali
  136. figure rimaste in memoria, ad esempio se avete giocato ad un gioco prima di
  137. eseguire questo listato probabilmente troverete gli sfondi e i personaggi del
  138. gioco sempre in memoria, in quanto la memoria non viene cancellata al reset, ma
  139. soltanto spegnendo il cumputer. Col tasto destro potete indietreggiare per
  140. centrare un'immagine che vi interessa; per uscire dovete premere entrambi i
  141. bottoni. provate a fare un'esperimento caricando vari videogiochi, resettando
  142. ed eseguendo questo programmino, per rintracciare in memoria quello che e'
  143. rimasto.
  144. Se volete velocizzare lo scorrimento dovete aumentare il valore aggiunto ai
  145. bitplane, basta che sia un multiplo di 80 (infatti per scorrere di una linea
  146. in HIRES, essendo largo 640 bit per linea anziche' 320, occorre il doppio di
  147. 40, che abbiamo fin qua usato per gli schermi in LOWRES).
  148. Nel listato lo schermo scorre di 3 linee alla volta:
  149.  
  150.     sub.l    #80*3,d0    ; sottraiamo 80*3, ossia 3 linee
  151.  
  152. Per farlo scorrere col TURBO provate con 80*10 o maggiori.
  153. Se per curiosita' volete sapere a che indirizzo sta un bitplane che vedete
  154. sullo schermo, uscite in quel punto e scrivete "M BPLPOINTERS":
  155.  
  156. XXXXXX 00 E0 00 02 00 E2 10 C0 ... (00 e0 = bplpointerH, 00 e2 l'altro BPLP)
  157.  
  158. ossia $00E0,$0002,$00E2,$10C0 ......
  159.  
  160. In questo esempio l'indirizzo e' $0002 10c0, ossia $210c0
  161.  
  162.